home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
basic
/
chaosexe.zip
/
XPENDLYA.TRU
< prev
next >
Wrap
Text File
|
1980-01-01
|
4KB
|
169 lines
!PROGRAM TITLE "XPENDLYA"
LIBRARY "SGLIB.TRC"
DIM A(1),B(1)
CLEAR
PRINT" ***PENDULUM - LYAPUNOV EXPONENTS***"
PRINT
PRINT"THIS PROGRAM CALCULATES THE 3 LYAPUNOV EXPONENTS FOR THE DRIVEN PENDULUM"
PRINT"USING THE ALGORITHM OF WOLF ET AL. THE EXPONENTS ARE SMOOTHED OVER "
PRINT"MANY DRIVE CYCLES (ORBITS)."
!
!N=# OF NONLINEAR EQUTNS., NN= TOTAL # OF EQUATIONS
LET N=3
LET NN=12
DECLARE DEF YPRIM
!
DIM Y(12), ZNORM(3), GSC(3), CUM(3), YNEW(12)
!
!INITIAL CONDITIONS FOR NONLINEAR SYSTEM
LET Y(1)=.5
LET Y(2)=0
LET Y(3)=0
!
!INITIAL CONDITIONS FOR LINEAR SYSTEM (ORTHONORMAL FRAME)
FOR I= N+1 TO NN
LET Y(I)=0.0
NEXT I
FOR I=1 TO n
LET Y((N+1)*I) = 1.0
LET CUM(I)=0.0
NEXT I
!
INPUT PROMPT"INTEGRATION STEPSIZE (TRY 0.5):":TSTEP
INPUT PROMPT"NUMBER OF ORBITS:":NUMORBITS
INPUT PROMPT"DRIVING FORCE:":G
INPUT PROMPT"DRIVE FREQUENCY:":W
INPUT PROMPT"DAMPING FACTOR:":Q
INPUT PROMPT"LOG BASE (1)NATURAL (2)INF0-2 CHOOSE 1 OR 2:":BASE
!
!SET UP GRAPHICS
IF BASE=1 THEN CALL SETYSCALE(-.7,.3)
IF BASE=2 THEN CALL SETYSCALE(-1,.5)
CALL SETXSCALE(0,NUMORBITS)
CALL SETTEXT("PENDULUM - LYAPUNOV EXPONENTS","# DRIVE CYCLES","LYAP. EXPS.")
CALL SETAXES(0)
CALL RESERVELEGEND
DATA 0,0
CALL DATAGRAPH(A,B,1,0,"WHITE")
CALL GOTOCANVAS
!
DO WHILE Y(3)<2*PI*NUMORBITS
!INITIALIZE INTEGRATOR
CALL RKK4(Y(),NN,TSTEP,Q,W,G,YNEW())
FOR K=1 TO 12
LET Y(K)=YNEW(K)
NEXT K
!
!CONSTRUCT A NEW ORTHONORMAL BASIS BY GRAM-SCHMIDT METHOD
!NORMALIZE FIRST VECTOR
LET ZNORM(1)=0.0
FOR J = 1 TO N
LET ZNORM(1) = ZNORM(1) +Y(N*J+1)^2
NEXT J
LET ZNORM(1)=(ZNORM(1))^.5
FOR J=1 TO N
LET Y(N*J+1)=Y(N*J+1)/ZNORM(1)
NEXT J
!
!GENERATE THE NEW ORTHONORMAL SET OF VECTORS
FOR J=2 TO N
! GENERATE J-1 COEFFICIENTS
FOR K = 1 TO (J-1)
LET GSC(K)=0.0
FOR L = 1 TO N
LET GSC(K) = GSC(K) + Y(N*L+J)*Y(N*L+K)
NEXT L
NEXT K
!
! CONSTRUCT A NEW VECTOR
FOR K = 1 TO N
FOR L= 1 TO J-1
LET Y(N*K+J) = Y(N*K+J) -GSC(L)*Y(N*K+L)
NEXT L
NEXT K
!
! CALCULATE THE VECTOR'S NORM
LET ZNORM(J) = 0.0
FOR K= 1 TO N
LET ZNORM(J) = ZNORM(J)+Y(N*K+J)^2
NEXT K
LET ZNORM(J) = (ZNORM(J))^.5
!
! NORMALIZE THE NEW VECTOR
FOR K = 1 TO N
LET Y(N*K+J) = Y(N*K+J)/ZNORM(J)
NEXT K
NEXT J
!
! UPDATE RUNNING VECTOR MAGNITUDES
FOR K = 1 TO N
LET CUM(K) = CUM(K) +LOG(ZNORM(K))
IF BASE = 2 THEN LET CUM(K) = CUM(K)/LOG(2)
NEXT K
!
!NORMALIZE EXPONENT AND PLOT EXPONENTS
IF Y(3)>0 THEN
LET T=Y(3)/W
FOR K = 1 TO N
LET CUMKT=CUM(K)/T
CALL GRAPHPOINT(T*W/(2*PI),CUMKT,1)
NEXT K
END IF
LOOP
!
CALL ADDLEGEND("G="&STR$(G)&" Q="&STR$(Q)&" W="&STR$(W),0,1,"WHITE")
CALL DRAWLEGEND
END
!
SUB RKK4(Y(),NN,TSTEP,Q,W,G,YNEW())
DIM Y1(12), Y2(12), Y3(12), Y4(12), YY1(12), YY2(12), YY3(12)
DECLARE DEF YPRIM
FOR K= 1 TO NN
LET Y1(K)=TSTEP*YPRIM(Y(),K,Q,W,G)
NEXT K
FOR K= 1 TO NN
LET YY1(K)=Y(K)+Y1(K)/2
NEXT K
FOR K=1 TO NN
LET Y2(K)=TSTEP*YPRIM(YY1(),K,Q,W,G)
NEXT K
FOR K = 1 TO NN
LET YY2(K)=Y(K)+Y2(K)/2
NEXT K
FOR K = 1 TO NN
LET Y3(K)=TSTEP*YPRIM(YY2(),K,Q,W,G)
NEXT K
FOR K = 1 TO NN
LET YY3(K)=Y(K)+Y3(K)
NEXT K
FOR K= 1 TO NN
LET Y4(K)=TSTEP*YPRIM(YY3(),K,Q,W,G)
NEXT K
FOR K = 1 TO NN
LET YNEW(K) = Y(K)+(Y1(K) +2*Y2(K)+2*Y3(K)+Y4(K))/6
NEXT K
END SUB
!DEFINE DERIVATIVES FUNCTIONS
DEF YPRIM(Y(),K,Q,W,G)
IF K=1 THEN LET YPRIM=-Y(1)/Q-SIN(Y(2))+G*COS(Y(3))
IF K=2 THEN LET YPRIM=Y(1)
IF K=3 THEN LET YPRIM=W
IF K>3 THEN
IF K<7 THEN
LET I = K-4
LET YPRIM=-Y(4+I)/Q-Y(7+I)*COS(Y(2))+G*Y(10+I)*COS(Y(3))
END IF
END IF
IF K>6 THEN
IF K<10 THEN
LET I = K-7
LET YPRIM=Y(4+I)
END IF
END IF
IF K>9 THEN LET YPRIM = 0
END DEF